/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dvd.servlets;

import dvd.gestionnaires.gestionnaireDvd;
import dvd.gestionnaires.gestionnairePersonne;
import dvd.gestionnaires.gestionnaireRole;
import dvd.modeles.Film;
import dvd.modeles.Genre;
import dvd.modeles.JouerRole;
import dvd.modeles.Personne;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Fanny
 */
@WebServlet(name = "ServletAdmin", urlPatterns = {"/ServletAdmin"})
public class ServletAdmin extends HttpServlet {

    @EJB
    private gestionnaireDvd gestionnaireDvd;
    @EJB
    private gestionnairePersonne gestionnaireP;
    @EJB
    private gestionnaireRole gestionnaireRole;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String forwardTo = "";
        String message = "";
        String action = request.getParameter("action");
        int max = Integer.valueOf(request.getSession().getAttribute("max").toString());
        int start = Integer.valueOf(request.getSession().getAttribute("start").toString());

        if (action != null) {
            if (action.equals("lister")) {
                Collection<Film> liste = gestionnaireDvd.getAllFilms(0, max);
                request.getSession().setAttribute("listeDesFilms", liste);
                request.getSession().setAttribute("total", gestionnaireDvd.getNbrFilms());
                request.getSession().setAttribute("start", 0);
                forwardTo = "admin.jsp?action=lister";

            }
            if (action.equals("suivant")) {
                Collection<Film> liste = gestionnaireDvd.getAllFilms(start + max, max);
                request.getSession().setAttribute("listeDesFilms", liste);
                request.getSession().setAttribute("start", start + max);
                forwardTo = "admin.jsp?action=lister";


            } else if (action.equals("precedent")) {
                Collection<Film> liste = gestionnaireDvd.getAllFilms(start - max, max);
                request.getSession().setAttribute("listeDesFilms", liste);
                request.getSession().setAttribute("start", start - max);
                forwardTo = "admin.jsp?action=lister";


            }
            if (action.equals("rechercher")) {
                try {
                    String titre = request.getParameter("titre");
                    Collection<Film> listeDesFilms = gestionnaireDvd.getFilmsFromTitre(titre);
                    request.getSession().setAttribute("listeDesFilms", listeDesFilms);
                    request.getSession().setAttribute("total", listeDesFilms.size());
                    request.getSession().setAttribute("start", 0);

                } catch (Exception e) {
                }
                forwardTo = "admin.jsp?action=lister";

            }
            if (action.equals("supprimer")) {
                int id = Integer.parseInt(request.getParameter("id"));
                try {
                    gestionnaireDvd.suppFilm(id);
                    message = "Suppression avec succès";
                    forwardTo = "ServletAdmin?action=lister";

                } catch (Exception e) {
                    message = "échec de la suppression";
                }

            }
            if (action.equals("addstock")) {
                int id = Integer.parseInt(request.getParameter("id"));
                int qte = Integer.parseInt(request.getParameter("qte"));
                gestionnaireDvd.addStock(id, qte);
                message = "Ajout au stock effectué.";
                forwardTo = "ServletAdmin?action=lister";
            }
            if (action.equals("ajouter")) {
                String titre = request.getParameter("titre");
                Double prix = Double.parseDouble(request.getParameter("prix"));
                String resume = request.getParameter("resume");
                //String photo = request.getParameter("photo");
                String photo = "bobine.jpg";
                String format = request.getParameter("format");
                int idreal = Integer.parseInt(request.getParameter("realisateur"));
                Personne real = gestionnaireP.getPersonneById(idreal);
                Genre genre = Genre.valueOf(request.getParameter("genre"));
                Film f = gestionnaireDvd.creeFilm(titre, prix, resume, photo, format, genre,1);
                f.setRealisateur(real);
                request.getSession().setAttribute("f", f);
                forwardTo = "admin.jsp?action=listeActeurs";
            }
            if (action.equals("addRole")) {
                int id = Integer.parseInt(request.getParameter("acteur"));
                String role = request.getParameter("role");
                Personne a = gestionnaireP.getPersonneById(id);
                Film f = (Film) request.getSession().getAttribute("f");
                gestionnaireRole.creeRole(f, a, role);
                Collection<JouerRole> liste = f.getLesRoles();
                request.getSession().setAttribute("listeRoles", liste);
                Collection<Personne> acteurs = (Collection<Personne>) request.getSession().getAttribute("acteurs");
                acteurs.remove(a);
                request.getSession().setAttribute("acteurs", acteurs);
                forwardTo = "admin.jsp?action=listeActeurs";
            }
            /*
             * if (action.equals("suppRole")) { /*Film f = (Film)
             * request.getSession().getAttribute("f"); JouerRole r =
             * gestionnaireRole.suppRole(f, p); Collection<Personne> acteurs =
             * (Collection<Personne>)
             * request.getSession().getAttribute("acteurs"); acteurs.add(p);
             * request.getSession().setAttribute("acteurs", acteurs);
             * Collection<JouerRole> listeR = f.getLesRoles(); message += " nbr
             * role " + listeR.size();
             * request.getSession().setAttribute("listeRoles", listeR);
             * forwardTo = "admin.jsp?action=listeActeurs"; }
             */

            if (action.equals("newActeur")) {
                String nom = request.getParameter("nom");
                String prenom = request.getParameter("prenom");
                //String photo = request.getParameter("photo");
                String description = request.getParameter("bio");
                String photo = "inconnu.jpg";

                Personne a = gestionnaireP.creePersonne(nom, prenom, description, "acteur", photo);
                Collection<Personne> acteurs = (Collection<Personne>) request.getSession().getAttribute("acteurs");
                acteurs.add(a);
                request.getSession().setAttribute("acteurs", acteurs);
                forwardTo = "admin.jsp?action=listeActeurs";

            }
            if (action.equals("newReal")) {
                String nom = request.getParameter("nom");
                String prenom = request.getParameter("prenom");
                //String photo = request.getParameter("photo");
                String description = request.getParameter("bio");
                String photo = "inconnu.jpg";
                Personne a = gestionnaireP.creePersonne(nom, prenom, description, "realisateur", photo);
                Collection<Personne> reals = (Collection<Personne>) request.getSession().getAttribute("realisateurs");
                reals.add(a);
                request.getSession().setAttribute("realisateurs", reals);
                if (request.getSession().getAttribute("redir").equals("modifier")) {
                    forwardTo = "admin.jsp?action=modifier";
                } else {
                    forwardTo = "admin.jsp?action=ajouter";
                }


            }

            if (action.equals("terminer")) {
                //remise à zéro
                Collection<Personne> liste = gestionnaireP.getAllActeurs();
                request.getSession().setAttribute("acteurs", liste);
                request.getSession().setAttribute("listeRoles", null);
                forwardTo = "ServletAdmin?action=lister";
            }
            if (action.equals("mod")) {
                int id = Integer.parseInt(request.getParameter("id"));
                Film f = gestionnaireDvd.getFilmFromId(id);
                request.getSession().setAttribute("f", f);
                request.getSession().setAttribute("title", f.getTitre());
                request.getSession().setAttribute("price", f.getPrix());
                request.getSession().setAttribute("sumup", f.getResume());
                //request.getSession().setAttribute("picture", f.getPhoto());
                request.getSession().setAttribute("genreS", f.getGenre().getGenre());
                request.getSession().setAttribute("formatS", f.getFormat());
                request.getSession().setAttribute("realS", f.getRealisateur());
                forwardTo = "admin.jsp?action=modifier";
            }
            if (action.equals("modifier")) {
                Film f = (Film) request.getSession().getAttribute("f");
                request.getSession().setAttribute("f", f);
                String titre = request.getParameter("titre");
                Double prix = Double.parseDouble(request.getParameter("prix"));
                String resume = request.getParameter("resume");
                String format = request.getParameter("format");
                Genre genre = Genre.valueOf(request.getParameter("genre"));
                int idreal = Integer.parseInt(request.getParameter("realisateur"));
                Personne real = gestionnaireP.getPersonneById(idreal);
                gestionnaireDvd.updateFilm(f, titre, prix, resume, format, genre, real);
                Collection<JouerRole> liste = f.getLesRoles();
                request.getSession().setAttribute("listeRoles", liste);
                Collection<Personne> acteurs = (Collection<Personne>) request.getSession().getAttribute("acteurs");
                for (JouerRole r : liste) {
                    acteurs.remove(r.getPersonne());
                }
                request.getSession().setAttribute("acteurs", acteurs);
                forwardTo = "admin.jsp?action=listeActeurs";
            }

        } else {
            forwardTo = "admin.jsp?action=todo";

        }
        request.setAttribute("message", message);
        RequestDispatcher dp = request.getRequestDispatcher(forwardTo);
        dp.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
